{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Draw BBox\n",
    "According to the given dataset, draw bboxes on the images and save them. Also, at the end, the class comparision is available"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import json\n",
    "import cv2\n",
    "from tqdm import tqdm"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "ann_path = 'seacoco/all_waterweeds.json' # annotation json\n",
    "img_path = 'seacoco/trainval/'\n",
    "save_path = 'seacoco/trainval_with_bbox/' # the path of saveing image with annotated bboxes"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "with open(ann_path,'r') as f:\n",
    "    ann = json.load(f)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|██████████| 5543/5543 [08:55<00:00, 10.36it/s]\n"
     ]
    }
   ],
   "source": [
    "for ann_img in tqdm(ann['images']):\n",
    "    img = cv2.imread(img_path + ann_img['file_name'])\n",
    "    img_id = ann_img['id']\n",
    "    for ann_ann in ann['annotations']:\n",
    "        if ann_ann['image_id'] == img_id:\n",
    "            x1 = ann_ann['bbox'][0]\n",
    "            y1 = ann_ann['bbox'][1]\n",
    "            x2 = ann_ann['bbox'][0] + ann_ann['bbox'][2]\n",
    "            y2 = ann_ann['bbox'][1] + ann_ann['bbox'][3]\n",
    "            img = cv2.rectangle(img, (x1,y1), (x2,y2), (255,0,0), 8)\n",
    "    cv2.imwrite(save_path + ann_img['file_name'], img)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "The augmentation image number: 6060\n",
      "The augmentation annotation number: 39788\n",
      "\n",
      "The instance number of each class:\n",
      "holothurian :  6991\n",
      "echinus :  20818\n",
      "scallop :  5653\n",
      "starfish :  6326\n"
     ]
    }
   ],
   "source": [
    "aug_anns = ann\n",
    "print(\"The augmentation image number: %d\" % len(aug_anns['images']))\n",
    "print(\"The augmentation annotation number: %d\" % len(aug_anns['annotations']))\n",
    "print(\"\")\n",
    "class_freq_dict = {}\n",
    "\n",
    "# init class_fre_dict\n",
    "for cls in aug_anns['categories']:\n",
    "    class_freq_dict[cls['id']] = 0\n",
    "\n",
    "# count the instance number of each class\n",
    "for ann in aug_anns['annotations']:\n",
    "    class_freq_dict[ann['category_id']] += 1\n",
    "\n",
    "# print out class frequency\n",
    "print(\"The instance number of each class:\")\n",
    "for cls_id in list(class_freq_dict.keys()):\n",
    "    for cat in aug_anns['categories']:\n",
    "        if cat['id'] == cls_id:\n",
    "            print(cat['name'], ': ', class_freq_dict[cls_id])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAaQAAAEYCAYAAAATRII7AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjAsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+17YcXAAAgAElEQVR4nO3deXwV1f3/8debfRFkERCMCCKbIkZBoCpKtSpqBfd9A6m/am2xdfliqYpaLa1WXOsKBTdQqwgqVlFBrIIIGkR2BCqRlE1kEQUCn98fcxIm4Sa5hCw35PN8PO7j3nvmzJkz2/3cOXNmRmaGc845V96qlHcFnHPOOfCA5JxzLkV4QHLOOZcSPCA555xLCR6QnHPOpQQPSM4551JCpQhIkoZIer6861HeJD0h6bbyrseeKO11KWmkpD8Xc9zakt6QtF7SKyVdt9K0J8tVUjNJUyRtlPT3kq5bAdPsJSmzLKbldpL0tqQrS6v8aqVVcFmStCn2tQ6wBdgevv+/sq9RyZM0Esg0sz8lmf8qYICZHZeTZma/Lp3aueA8oBnQ2Myyy7syZegaYA1Q38xM0hDgEDO7rHyrFUm0L1RGkiYDz5vZM0nmH0K+9Whmp5VO7SJ7xRGSme2T8wK+Ac6Mpb1Q3vVzqUlSSf8hOwhYWJxgVAp1KUsHAXOthK6yr+DLwu0JM9urXsAy4Bf50oYALwPPAhuBOUDX2PAWwKvAamAp8LtCyj8D+ALYACwHhsSGtQIMuJIoMK4BBu9GPToCk4Hvw7A+If0aYBuwFdgEvBHSBwFfh7LmAmfHyvmJ6ChxE/B9SB8J/Dk2vV8Bi4HvgPFAi9gwA34NLALWAY8BKmCZFDVfRvRPi/z1AHoBmcAtwCogCzgLOB1YGOr2x3zT+hfwUpjW58ARyazL2LjPh/U3IMG8jASeACaG8j8EDooN7xCGfQcsAC4I6XeG9bMtLPOrif7w/Qn4b5i3Z4F9820rVxNtK1NCeg/gk7ANzAJ6FbItJlz/YdhVwH+A+8P6WwqcFhveOszbxjA/jxL9e040nYbAm2GZrguf02LLK75t/jLfcpgV8u0LDA/r91vgz0DVWF0/BoaF5frnBHWoHaa1LszrzUQtBoUuCwreFwrcj3dn/hP95hBtZ8/Hvl8RtoG1wG3x/CHvK0Tb5EZgNtAOuDVsM8uBU2JlFbUcE65z4J6wDH4Ky+HRkP5QmMYGYCbQM6T3LmA9TibsNyS3fSf8LSxwWZdGUCjPV/6NI7bSfyL6kasK/AWYFluoM4HbgRrAwcAS4NQCyu8FHB7G6wysBM7KtxKeJtqBjiBqPuyYRD2qEwWHP4Z6nBg20PaxHf/P+epyPtEPcBXgQuAHoHl848yXP7eMUP4a4CigJvAI4UcxDDeiHa8B0JJoZ+xdwDIpcL5iZRUWkLLD8q9OFCRXAy8C9YDDQtkHx6a1jah5rDpwE9GOV72odRkb96yQt3aCeRkZlvvxYbk8lLMcgbpEO28/oubuo8IyPKyAH6L+YZ0eDOwDvAY8l29beTaUWxs4gOhH6/RQv5PD9yYFLPei1v+2sDyrAtcCKwh/KoCpwANhHo8P81xQQGoMnEvUHF6P6Af09UTrM9FyCGmvA0+GeW0KTAf+X6yu2cBvw3JNtF6GAh8BjYADga/IG5B2d1/oRQH7cTHmfxkFBCTgUKIf9OOItsn7w3qJB6SfgFPDvD9LtD0PZuf+sHQ3lmNh63wy+f6EAZeF+asG3Aj8D6hVyHrMLYPktu+Ev4UF/n6XVmAor1f+jSO2YN+LfT8U+DF87g58ky//rcA/k5zeg8CwfCsh/u9pOnBREvXoGTaGKrHhown/3EgQkBLUJQPoW8hOmFsG0b+sv8WG7RM25lbhuwHHxYa/DAwqYLoFzlesrMIC0o/s/JdXL+TvHss/k51Bfwh5g10Von+LPYtal2HcKYnmIV/dxuRbLtuJfgQvBD7Kl/9J4I5Y+fGA9D5wXex7+7CMq8W2lYNjw/+PsEPH0t4BrkxyW8y//hfHhtUJ09uf6A9GNlA3NvxFCghICaaTDqxLtD4LWA7NiH6MasfSLgYmxer6TRHTXELsDxFRq0FmIfkL3RcS5M/dj4sx/8soOCDdDozOtx62kjcgTYwNP5MogOXfHxokuRwTrvPwfTIJWgXyzds6QotD/vWYvwyS274T/hYW9KpMbbX/i33eDNQKbdUHAS0kfR8bXpXo39guJHUn+rfWiegfT02if0yFTWufJOrRAlhuZjtiw/9L9K85IUlXAH8gWvmE6exXUP58WhA1dwFgZpskrQ3TW5bEfOSXcL4sufMpa80spxPKj+F9ZWz4j/mmvTxW7x2ht1ULoh2gqHW5nKLFy98k6btQ/kFA93zlVwOeK6CcFkTrMMd/Q/5mBdTnIOB8SWfG0qoDkxIVnsT6z10nZrZZUjzPOjP7IV/dDixgOnWImtN6EzVfAdSTVDW23gpzUJiPrFAHiP5IxOe9qPXSIl+e+HLd7X0hyf04J++ezH+eeof1sDZfnvzb+poE+8M+oayilmNB6zwhSTcCA9i5/9Rn935Ditq+d+c3pFIFpIIsJzokbptk/heJ2ttPM7OfJD1I8iuwMCuAAyVViQWllkTnUSDaWHJJOojocPgkYKqZbZeUAShR/gKmd1CsvLpEh+7f7tFcJLaZ6N9ajv2JzhsVV+4Pp6QqQBrR/GRT9LosarnkL38fomaiFUTbyodmdnKS9cyzjNl5ZLIy1Dl/fZYTHSH9qqiCk1j/hckCGkqqGwtKLSl42dxI9O+3u5n9T1I60fmXgqaVv5zlRP/s9yvkD0pR6yWLaL3MidUXKPa+sDv7cVHz/wO7bt/xereP1bU20X5WHMksx8Lk/w3pSXRUfhIwJ/y5W0cxf0NIvH3vlr2il90emg5skPR/4TqSqpI6STq6gPz1gO/CRtwNuKSE6vEp0YZ9i6TqknoRHb6PCcNXErXV5qhLtMGsBpDUj+jfHrH8aZJqFDC9F4F+ktIl1QTuBT41s2UlMzt5ZACXhGXbGzhhD8vrIumccGR5A9FOOo3dX5cFOV3ScWHZ3U20XJYTnVNrJ+nysI6qSzpaUscCyhkN/F5S6xDY7gVeKuTH5HngTEmnhrrXCtfbJNq5i1r/BTKz/wIzgDsl1ZB0HNG2VpB6RP/Uv5fUCLijiEmsBFqFPwuYWRbwLvB3SfUlVZHURtLubAcvA7dKahiWx29jw4qzL+zOflzU/GcAF4XtoSvR+c0c/yJap8eE6d9Jcn8adlECyzH/b0g9ogCyGqgm6XaiI6R4/tz1mMDubt9FqvQBKRwan0nULryU6CT1M0S9WRK5DrhL0kai9uGXS6geW4E+wGmhDv8ArjCz+SHLcOBQSd9Let3M5gJ/Jzo5vZLoBO3HsSI/IPo3+T9JaxJM732iHj+vEv2LawNcVBLzksBAomX8PXAp0YnZPTGO6HzOOuBy4Bwz21aMdVmQF4l+dL4DuoQ6Y2YbgVOIltMKouaIvxI19yQygqg5b0qoz0/k/SHNIwS9vkQdW1YT/SO+mQT7aRLrvyiXEJ1z+y7M67OF5H2Q6MT0GqLA/+8iys5p+lorKadZ+AqiprG5ROvtX0Dz3ajvnURNQkuJfpRzm0mLuS/szn5c1PzfRrT/rAv1fDFWtzlE63wM0X62kahH2pbkZnsXe7IcHwLOk7RO0sNE5yffJmqF+S/R9hlv/ku0HuN2a/tORk7vC+ecc6UsHEl8D7Q1s6XlXZ9UU+mPkJxzrjRJOlNSnXCe9n6ia42WlW+tUpMHJOecK119iZp4VwBtibo+e9NUAt5k55xzLiX4EZKrdCQdKGmSpHmS5kgaGNIbSZooaVF4bxjS91V0F+9ZIX+/WFn/Dh1N3sw3jZMkfS4pQ9J/JB1StnPpXMVT6Y6Q9ttvP2vVqlV5V8OVo23btrFt2zbq1KnD9u3bmTdvHm3atGHt2rVUq1aN/fffn//9739kZ2eTlpZGVlYW27dvJy0tjW3btjFnzhw6d+5MlSpV2LBhAzt27GDNmjUccsjOmPPVV1/Rpk0bateuzapVq9i8eTO+3bm92cyZM9eYWZM9KiSZW2XsTa8uXbqYc3F9+vSxd99919q1a2crVqwwM7MVK1ZYu3btzMzs3nvvtWuvvdZ27NhhS5YssTZt2tj27dtzx580aZKdccYZecps166dTZs2LXf8W2+9tYzmxrnyAcywPfx99js1uEpt2bJlfPHFF3Tv3p2VK1fSvHl0SUfz5s1ZtWoVANdffz19+vShRYsWbNy4kZdeeokqVQpv7X7mmWc4/fTTqV27NvXr12fatGmlPi/OVXR+DslVWps2beLcc8/lwQcfpH79+gXme+edd0hPT2fFihVkZGRw/fXXs2HDhkLLHjZsGBMmTCAzM5N+/frxhz/8oaSr79xexwOSq5S2bdvGueeey6WXXso555wDQLNmzcjKygIgKyuLpk2bAvDPf/6Tc845B0kccsghtG7dmvnz5xdY9urVq5k1axbdu3cH4MILL+STTz4p5TlyruLzJjtX6ZgZV199NR07dsxz5NKnTx9GjRrFoEGDGDVqFH379gWgZcuWvP/++/Ts2ZOVK1eyYMECDj744IKKp2HDhqxfv56FCxfSrl07Jk6cSMeOBd3uzpWVbdu2kZmZyU8//VTeVanQatWqRVpaGtWrVy/xsitdL7uuXbvajBkzyrsarhz95z//oWfPnhx++OG554LuvfdeunfvzgUXXMA333xDy5YteeWVV2jUqBErVqzgqquuIisrCzNj0KBBXHbZZQD07NmT+fPns2nTJho3bszw4cM59dRTGTt2LLfffjtVqlShYcOGjBgxotAg5krf0qVLqVevHo0bNyb2+Aa3G8yMtWvXsnHjRlq3bp1nmKSZZtZ1T8r3gOScqxTmzZtHhw4dPBjtITNj/vz5uxz1l0RA8nNIzrlKw4PRnivNZegByTnnXErwTg3OuUqp1aC3SrS8ZUPPKHT4999/z4svvsh11123W+WefvrpvPjiizRo0GBPqlch+BGSc86Vge+//55//OMfu6Rv37690PEmTJhQKYIR+BGSq4yG7O4DZEtquuvLZ7ouJQwaNIivv/6a9PR0qlevzj777EPz5s3JyMhg7ty5nHXWWSxfvpyffvqJgQMHcs011wDQqlUrZsyYwaZNmzjttNM47rjj+OSTTzjggAMYN24ctWvXLuc5Kzl+hOScc2Vg6NChtGnThoyMDO677z6mT5/OPffcw9y5cwEYMWIEM2fOZMaMGTz88MOsXbt2lzIWLVrEb37zG+bMmUODBg149dVXy3o2SpUfITnnXDno1q1bnmt5Hn74YcaOHQvA8uXLWbRoEY0bN84zTuvWrUlPTwegS5cuLFu2rMzqWxY8IDnnXDmoW7du7ufJkyfz3nvvMXXqVOrUqUOvXr0S3lGiZs2auZ+rVq3Kjz/+WCZ1LSveZOecc2WgXr16bNy4MeGw9evX07BhQ+rUqcP8+fMr7d3hS+0ISdKBwLPA/sAO4Ckze0hSI+AloBWwDLjAzNYputrqIeB0YDNwlZl9Hsq6EvhTKPrPZjYqpHcBRgK1gQnAQKtst55wzhVLUd20S1rjxo059thj6dSpE7Vr16ZZs2a5w3r37s0TTzxB586dad++PT169CjTuqWKUrt1kKTmQHMz+1xSPWAmcBZwFfCdmQ2VNAhoaGb/J+l04LdEAak78JCZdQ8BbAbQFbBQTpcQxKYDA4FpRAHpYTN7u7B6+a2DnPeyq5zmzZvnN7ktIYmWZUrfOsjMsnKOcMxsIzAPOADoC4wK2UYRBSlC+rPh4YPTgAYhqJ0KTDSz78xsHTAR6B2G1TezqeGo6NlYWc455yqYMjmHJKkVcCTwKdDMzLIgClpA05DtAGB5bLTMkFZYemaC9ETTv0bSDEkzVq9evaez45xzrhSUekCStA/wKnCDmRX2mM1Ed+yzYqTvmmj2lJl1NbOuTZo0KarKzjnnykGpBiRJ1YmC0Qtm9lpIXhma23LOM60K6ZnAgbHR04AVRaSnJUh3FUj//v1p2rQpnTp1yk3LyMigR48epKen07VrV6ZPn547bPLkyaSnp3PYYYdxwgknALBgwQLS09NzX/Xr1+fBBx/MHeeRRx6hffv2HHbYYdxyyy1lN3POud1SagEp9JobDswzswdig8YDV4bPVwLjYulXKNIDWB+a9N4BTpHUUFJD4BTgnTBso6QeYVpXxMpyFcRVV13Fv//97zxpt9xyC3fccQcZGRncdddduUHk+++/57rrrmP8+PHMmTOHV155BYD27duTkZFBRkYGM2fOpE6dOpx99tkATJo0iXHjxvHll18yZ84cbrrpprKdQedc0krzwthjgcuB2ZIyQtofgaHAy5KuBr4Bzg/DJhD1sFtM1O27H4CZfSfpbuCzkO8uM/sufL6Wnd2+3w4vV4Ecf/zxu1xtLokNG6LW3fXr19OiRQsAXnzxRc455xxatmwJQNOmTcnv/fffp02bNhx00EEAPP744wwaNCj3gsJE4zjnUkOpBSQz+w+Jz/MAnJQgvwG/KaCsEcCIBOkzgE67juEqsgcffJBTTz2Vm266iR07dvDJJ58AsHDhQrZt20avXr3YuHEjAwcO5Iorrsgz7pgxY7j44otzvy9cuJCPPvqIwYMHU6tWLe6//36OLtO5cSmrpLv/e7f+PeZ3anAp5/HHH2fYsGEsX76cYcOGcfXVVwOQnZ3NzJkzeeutt3jnnXe4++67WbhwYe54W7duZfz48Zx//vm5adnZ2axbt45p06Zx3333ccEFF+DXTru9zbJly3jxxReLNe4xxxxTwrUpPg9ILuWMGjWKc845B4Dzzz8/t1NDWloavXv3pm7duuy3334cf/zxzJo1K3e8t99+m6OOOirPFfBpaWmcc845SKJbt25UqVKFNZs9ILm9S2EBKTs7u9Bxc1ogUoEHJJdyWrRowYcffgjABx98QNu2bQHo27cvH330EdnZ2WzevJlPP/00z9Xio0ePztNcB3DWWWfxwQcfAFHz3datW9mvTkEtyc6VrrPOOosuXbpw2GGH8dRTTwGwzz775A7/17/+xVVXXQXA119/TY8ePTj66KO5/fbb8+TLb9CgQXz00Uekp6czbNgwRo4cyfnnn8+ZZ57JKaecwqZNmzjppJM46qijOPzwwxk3bmf/r5xyJ0+eTK9evTjvvPPo0KEDl156aZm3Jvjdvl25uvjii5k8eTJr1qwhLS2NO++8k6effpqBAweSnZ1NrVq1cnfcjh070rt3bzp37kyVKlUYMGBAbnfxzZs3M3HiRJ588sk85ffv35/+/fvTqVMnatSowahRo9CUs8t8Pp2D6JlHjRo14scff+Too4/m3HPPLTDvwIEDGThwIBdffDFPPPFEoeUOHTqU+++/nzfffBOAkSNHMnXqVL788ksaNWpEdnY2Y8eOpX79+qxZs4YePXrQp08fog7KO33xxRfMmTOHFi1acOyxx/Lxxx9z3HHH7fmMJ8kDkitXo0ePTpg+c+bMhOk333wzN9988y7pderUSfhAsxo1avD888/nTZyy+/V0riQkeuZRQaZOncrrr78OwCWXXLLblyycfPLJNGrUCAAz449//CNTpkyhSpUqfPvtt6xcuZL9998/zzjdunUjLS26vDM9PZ1ly5Z5QHLOub1NQc88ih+lJHoGUnHFn7f0wgsvsHr1ambOnEn16tVp1apVUs9bKur8U0nzgOScq5zKuJt2Qc88atasGfPmzaN9+/aMHTuWevXqAdCjRw9effVVLrzwQsaMGVNo2YU9ayln2k2bNqV69epMmjSJ//73vyU3YyXIOzU451wZ6N27N9nZ2XTu3Jnbbrst95lHQ4cO5Ze//CUnnngizZs3z83/4IMP8sADD9CtWzeysrLYd9+Cr5vq3Lkz1apV44gjjmDYsGG7DL/00kuZMWMGXbt25YUXXqBDhw4lP4MloNSeh5Sq/HlIqaXVoLfKfJrLal1S5tME/MLJclbRnoe0efNmateujSTGjBnD6NGj8/SOK0+l9Twkb7JzzrkUNHPmTK6//nrMjAYNGjBixC43q9nreEByzrkU1LNnzzwXfgPMnj2byy+/PE9azZo1+fTTT8uyaqXGA5JzrtIws12uvalIDj/8cDIyMorOWIpK8zSPd2pwzlUKtWrVYu3atX4vwz1gZqxdu5ZatWqVSvl+hOScqxTS0tLIzMxk9erV5V2VCq1WrVq5F8+WNA9IzrlKoXr16rRu3bq8q+EK4U12zjnnUoIHJOeccynBA5JzzrmUUGoBSdIISaskfRVLe0lSRngtk5QR0ltJ+jE27InYOF0kzZa0WNLDCn02JTWSNFHSovDesLTmxTnnXOkrzSOkkUDveIKZXWhm6WaWDrwKvBYb/HXOMDP7dSz9ceAaoG145ZQ5CHjfzNoC74fvzjnnKqhSC0hmNgX4LtGwcJRzAZD4YTg78zUH6pvZVIsuHngWOCsM7guMCp9HxdKdc85VQOV1DqknsNLM4k+nai3pC0kfSuoZ0g4AMmN5MkMaQDMzywII700LmpikayTNkDTDr0FwzrnUVF4B6WLyHh1lAS3N7EjgD8CLkuoDie7xsduXWZvZU2bW1cy6NmnSpFgVds45V7rK/MJYSdWAc4AuOWlmtgXYEj7PlPQ10I7oiCh+SXAasCJ8XimpuZllhaa9VWVRf+ecc6WjPI6QfgHMN7PcpjhJTSRVDZ8PJuq8sCQ0xW2U1COcd7oCyHkgyHjgyvD5yli6c865Cqg0u32PBqYC7SVlSro6DLqIXTszHA98KWkW8C/g12aW0yHiWuAZYDHwNfB2SB8KnCxpEXBy+O6cc66CKrUmOzO7uID0qxKkvUrUDTxR/hlApwTpa4GT9qyWzjnnUoXfqcE551xK8IDknHMuJXhAcs45lxI8IDnnnEsJHpCcc86lBA9IzjnnUoIHJOeccynBA5JzzrmU4AHJOedcSvCA5JxzLiV4QHLOOZcSPCA555xLCR6QnHPOpQQPSM4551KCByTnnHMpwQOSc865lOAByTnnXEooNCBJqirpveIULGmEpFWSvoqlDZH0raSM8Do9NuxWSYslLZB0aiy9d0hbLGlQLL21pE8lLZL0kqQaxamnc8651FBoQDKz7cBmSfsWo+yRQO8E6cPMLD28JgBIOhS4CDgsjPOPEAyrAo8BpwGHAheHvAB/DWW1BdYBVxejjs4551JEtSTy/ATMljQR+CEn0cx+V9hIZjZFUqsk69EXGGNmW4ClkhYD3cKwxWa2BEDSGKCvpHnAicAlIc8oYAjweJLTc845l2KSCUhvhVdJuV7SFcAM4EYzWwccAEyL5ckMaQDL86V3BxoD35tZdoL8zjnnKqAiA5KZjZJUG2hpZgv2cHqPA3cDFt7/DvQHlGjSJG5StELyJyTpGuAagJYtW+5ejZ1zzpWJInvZSToTyAD+Hb6nSxpfnImZ2Uoz225mO4Cn2dkslwkcGMuaBqwoJH0N0EBStXzpBU33KTPramZdmzRpUpyqO+ecK2XJdPseQhQ4vgcwswygdXEmJql57OvZQE4PvPHARZJqSmoNtAWmA58BbUOPuhpEHR/Gm5kBk4DzwvhXAuOKUyfnnHOpIZlzSNlmtl7K00pWYPNYDkmjgV7AfpIygTuAXpLSw/jLgP8HYGZzJL0MzAWygd+EHn5Iuh54B6gKjDCzOWES/weMkfRn4AtgeBLz4pxzLkUlE5C+knQJUFVSW+B3wCdFjWRmFydILjBomNk9wD0J0icAExKkL2Fnk59zzrkKLpkmu98SXR+0BRgNbABuKM1KOeecq3yS6WW3GRgs6a/RV9tY+tVyzjlX2STTy+5oSbOBL4kukJ0lqUvpV80551xlksw5pOHAdWb2EYCk44B/Ap1Ls2LOOecql2TOIW3MCUYAZvYfwJvtnHPOlagCj5AkHRU+Tpf0JFGHBgMuBCaXftWcc85VJoU12f093/c7Yp+LvA7JOeec2x0FBiQz+3lZVsQ551zlVmSnBkkNgCuAVvH8RT1+wjnnnNsdyfSym0D0aIjZwI7SrY5zzrnKKpmAVMvM/lDqNXHOOVepJdPt+zlJv5LUXFKjnFep18w551ylkswR0lbgPmAwO3vXGXBwaVXKOedc5ZNMQPoDcIiZrSntyjjnnKu8kmmymwNsLu2KOOecq9ySOULaDmRImkT0CArAu30755wrWckEpNfDyznnnCs1yTwPaVRZVMQ551zllszzkJZKWpL/lcR4IyStkvRVLO0+SfMlfSlpbLgLBJJaSfpRUkZ4PREbp4uk2ZIWS3pYkkJ6I0kTJS0K7w2Ltwicc86lgmQ6NXQFjg6vnsDDwPNJjDcS6J0vbSLQycw6AwuBW2PDvjaz9PD6dSz9ceAaoG145ZQ5CHjfzNoC74fvzjnnKqgiA5KZrY29vjWzB4ETkxhvCvBdvrR3zSw7fJ0GpBVWhqTmQH0zm2pmBjwLnBUG9wVymhNHxdKdc85VQMncXPWo2NcqREdM9Upg2v2Bl2LfW0v6AtgA/Ck8FPAAIDOWJzOkATQzsywAM8uS1LSgCUm6hugoi5YtW5ZA1Z1zzpW0ZHrZxZ+LlA0sAy7Yk4lKGhzKeiEkZQEtzWytpC7A65IOA5Rg9N1+FpOZPQU8BdC1a1d/lpNzzqWgZHrZlehzkSRdCfwSOCk0w2FmWwjXOJnZTElfA+2IjojizXppwIrweaWk5uHoqDmwqiTr6ZxzrmwV9gjzKwob0cye3d2JSeoN/B9wgpltjqU3Ab4zs+2SDibqvLDEzL6TtFFSD+BToucyPRJGGw9cCQwN7+N2tz7OOedSR2FHSEcnSBNwJtF5nEIDkqTRQC9gP0mZRI9AvxWoCUwMvbenhR51xwN3ScomujPEr80sp0PEtUQ99moDb4cXRIHoZUlXA98A5xdWH+ecc6mtsEeY/zbnc7j251Kio5tpwD1FFWxmFydIHl5A3leBVwsYNgPolCB9LXBSUfVwzjlXMRR6DklSNeAq4EaiJrPzzGxBGdTLOedcJVPYOaTfAAOJLjrtbWb/LbNaOeecq3QKO0J6hORrIS4AAB0VSURBVKjn2nHAG+GcD0TnkSzcbcE555wrEYUFpNZlVgvnnHOVXmGdGryJzjnnXJlJ5uaqzjnnXKnzgOSccy4leEByzjmXEpK52/exwBDgoJA/p5fdwaVbNeecc5VJMnf7Hg78HphJdFsf55xzrsQlE5DWm9nbRWdzzjnnii+ZgDRJ0n3Aa4RHRACY2eelVivnnHOVTjIBqXt47xpLM5J4jLlzzjmXrDJ/QJ9zzjmXSJHdviXtK+kBSTPC6++S9i2LyjnnnKs8krkOaQSwEbggvDYA/yzNSjnnnKt8kjmH1MbMzo19v1NSRmlVyDnnXOWUzBHSj5KOy/kSLpT9sfSq5JxzrjJKJiBdCzwmaZmk/wKPAr9OpnBJIyStkvRVLK2RpImSFoX3hiFdkh6WtFjSl5KOio1zZci/SNKVsfQukmaHcR5W7KFNzjnnKpYiA5KZZZjZEUBn4HAzO9LMZiVZ/kigd760QcD7ZtaW6Gm0g0L6aUDb8LoGeByiAAbcQdT9vBtwR04QC3muiY2Xf1rOOecqiMIeYX6ZmT0v6Q/50gEwsweKKtzMpkhqlS+5L9ArfB4FTAb+L6Q/a2YGTJPUQFLzkHeimX0Xpj8R6C1pMlDfzKaG9GeBswC/q4RzzlVAhXVqqBve6yUYZnswzWZmlgVgZlmSmob0A4DlsXyZIa2w9MwE6buQdA3RkRQtW7bcg6o755wrLYU9MfbJ8PE9M/s4Pix0bChpic7/WDHSd000ewp4CqBr1657Ekydc86VkmQ6NTySZFqyVoamOML7qpCeCRwYy5cGrCgiPS1BunPOuQqosHNIPwOOAZrkO49UH6i6B9McD1wJDA3v42Lp10saQ9SBYX1o0nsHuDfWkeEU4FYz+07SRkk9gE+BK9izQOmcc64cFXYOqQawT8gTP4+0ATgvmcIljSbqlLCfpEyi3nJDgZclXQ18A5wfsk8ATgcWA5uBfgAh8NwNfBby3ZXTwYGoS/pIoDZRZwbv0OCccxVUYeeQPgQ+lDTSzP5bnMLN7OICBp2UIK8BvymgnBFEtzDKnz4D6FScujnnnEstydw6aHN4HtJhQK2cRDPzx08455wrMcl0angBmA+0Bu4ElrGz+cw555wrEckEpMZmNhzYZmYfmll/oEcp18s551wlk0yT3bbwniXpDKKu1WmF5HfOOed2WzIB6c/hgXw3EnWrrg/cUKq1cs45V+kkE5DWmdl6YD3wcyi1OzU455yrxMrjTg3OOefcLsrjTg3OOefcLkr1Tg3OOedcspK+U4OkelGybSq76jnnnKsskunUUE/SF0AjAElrgCvN7KvCR3POOeeSl0ynhqeAP5jZQWZ2EFH376dKt1rOOecqm2QCUl0zm5Tzxcwms/Npss4551yJSKbJbomk24DnwvfLgKWlVyXnnHOVUTJHSP2BJsBrwNjwuV9pVsoV7vvvv+e8886jQ4cOdOzYkalTpzJr1ix+9rOfcfjhh3PmmWeyYcMGALZu3Uq/fv04/PDDOeKII5g8eXJuOYMHD+bAAw9kn332Kac5cc65nYoMSGa2zsx+Z2ZHmdmRZjbQzNaVReVcYgMHDqR3797Mnz+fWbNm0bFjRwYMGMDQoUOZPXs2Z599Nvfddx8ATz/9NACzZ89m4sSJ3HjjjezYsQOAM888k+nTp5fbfDjnXFyRAUlSO0lPSXpX0gc5r7KonNvVhg0bmDJlCldffTUANWrUoEGDBixYsIDjjz8egJNPPplXX30VgLlz53LSSdHzEJs2bUqDBg2YMWMGAD169KB58+blMBfOOberZJrsXgG+AP4E3Bx7uXKwZMkSmjRpQr9+/TjyyCMZMGAAP/zwA506dWL8+PEAvPLKKyxfvhyAI444gnHjxpGdnc3SpUuZOXNm7jDnnEslyQSkbDN73Mymm9nMnFdxJyipvaSM2GuDpBskDZH0bSz99Ng4t0paLGmBpFNj6b1D2mJJg4pbp4okOzubzz//nGuvvZYvvviCunXrMnToUEaMGMFjjz1Gly5d2LhxIzVq1ACgf//+pKWl0bVrV2644QaOOeYYqlVLpi+Lc86VrWR+md6QdB1Rh4YtOYlm9l1xJmhmC4B0AElVgW9D2f2AYWZ2fzy/pEOBi4geod4CeE9SuzD4MeBkIBP4TNJ4M5tbnHpVFGlpaaSlpdG9e3cAzjvvPIYOHcrdd9/Nu+++C8DChQt56623AKhWrRrDhg3LHf+YY46hbdu2ZV9x55wrQjIB6crwHm+mM+DgEpj+ScDX4dZEBeXpC4wxsy3AUkmLgW5h2GIzWwIgaUzIu1cHpP33358DDzyQBQsW0L59e95//30OPfRQVq1aRdOmTdmxYwd//vOf+fWvfw3A5s2bMTPq1q3LxIkTqVatGoceemg5z4Vzzu0qmV52rRO8SiIYQXTkMzr2/XpJX0oaIalhSDsAiJ/0yAxpBaXvQtI1kmZImrF69eoSqnr5eeSRR7j00kvp3LkzGRkZ/PGPf2T06NG0a9eODh060KJFC/r1i3rmr1q1iqOOOoqOHTvy17/+leeeey63nFtuuYW0tDQ2b95MWloaQ4YMKac5cs4VJtGlHrfddhudO3cmPT2dU045hRUrVgDwwgsv0LlzZzp37swxxxzDrFmzCi0nlcjMis4kHQO0InZEZWbP7tGEpRpEj0M/zMxWSmoGrCE6+robaG5m/SU9Bkw1s+fDeMOBCUTB9FQzGxDSLwe6mdlvC5tu165dLaeXmSt/rQa9VebTXFbrkjKfJgBD1pfPdF2Fd+WVV9KzZ08GDBjA1q1b2bx5M1WqVKF+/foAPPzww8ydO5cnnniCTz75hI4dO9KwYUPefvtthgwZwqefflpgOQ0aNCiROkqaaWZd96SMIpvsJD0HtAEygO0h2YA9CkjAacDnZrYSIOc9TPNp4M3wNRM4MDZeGlEgo5B055zbK+Rc6jFy5EggutQjp9NSjh9++IGc0x7HHHNMbnqPHj3IzMxMupzylsw5pK7AoZbModTuuZhYc52k5maWFb6eDeTcTXw88KKkB4g6NbQFpgMC2kpqTdQx4iKgnP76Oudc6Yhf6jFr1iy6dOnCQw89RN26dRk8eDDPPvss++67L5MmTdpl3OHDh3PaaacVWU6qSKbb91fA/iU5UUl1iHrHvRZL/puk2ZK+BH4O/B7AzOYALxN1Vvg38Bsz225m2cD1wDvAPODlkNc55/YaBV3qAXDPPfewfPlyLr30Uh599NE8402aNInhw4fz17/+tchyUkUyR0j7AXMlTSdvt+8+xZ2omW0GGudLu7yQ/PcA9yRIn0B0PmnvNmTfcpimn+9wLhUUdKlH3CWXXMIZZ5zBnXfeCcCXX37JgAEDePvtt2ncuHHS5ZS3ZALSkNKuhHPOucQKutRj0aJFudcUjh8/ng4dOgDwzTffcM455/Dcc8/Rrl27IstJJUUGpPAo81ySjiU6V/Nh4jGcc5VZq1atqFevHlWrVqVatWq590585JFHePTRR6lWrRpnnHEGf/vb31i2bBkdO3akffv2QHQS/oknngCgd+/eZGVlkZ2dTc+ePXnssceoWrVquc0XJJ63Cy+8kAULFgBRt+oGDRqQkZEBwF/+8heGDx9O1apVefjhhzn11NwbzbB9+3a6du3KAQccwJtvvplwejlyLvXYunUrBx98MP/85z8ZMGAACxYsoEqVKhx00EG5y+2uu+5i7dq1XHfddQC7rIP85aSSpO4hIymdKAhdQPQspFdLs1LOuZKR6Ad0yJAhPP300zRp0gSAe++9l9NPP73Q4JCjT58+LFmyhK+++mqXacVNmjSJ/fbbL8/3cePG8eWXX1KzZk1WrVqVO6xNmza5P+BxL7/8MvXr18fMOO+883jllVe46KKLir0sSkr+eXvppZdyP994443su2/UxD537lzGjBnDnDlzWLFiBb/4xS9YuHBhblB96KGH6NixY+6jYgqTnp5O/stVcm6gnN8zzzzDM888k3Q5qaTAgBRuz3MRUW+4tcBLRNct/byM6uacKwH5f0ABfv/733PTTTftkreg4ADw2muvFfvZWY8//jiDBg2iZs2aQHTn+aLkXGOTnZ3N1q1bKeRuLinBzHj55Zf54IPoYQjjxo3joosuombNmrRu3ZpDDjmE6dOn87Of/YzMzEzeeustBg8ezAMPPFDONU8dhfWym090a58zzew4M3uEndchOecqkU2bNvHAAw/wpz/9qci8kjjllFPo0qULTz31FBDdX/Gjjz6ie/funHDCCXz22We5+ZcuXcqRRx7JCSecwEcffZSnrFNPPZWmTZtSr149zjvvvJKdqWJING85PvroI5o1a5Z7Xufbb7/lwAN3XiqZlpbGt99+C8ANN9zA3/72N6pUSaajc+VR2NI4F/gfMEnS05JOIrr2xzlXQRT0A/roo4/SuXNn+vfvz7p1O5+3WVBwuO2227jxxhupU6dOkdP8+OOP+fzzz3n77bd57LHHmDJlCtnZ2axbt45p06Zx3333ccEFF2BmNG/enG+++YYvvviCBx54gEsuuSRPE9Y777xDVlYWW7ZsyT3yKE+J5i3H6NGjufjii3O/J7p0UxJvvvkmTZs2pUuXLmVS54qkwCY7MxsLjJVUFziL6LqgZpIeB8aa2btlVEfnXDF9/PHHtGjRglWrVnHyySfToUMHrr32Wm677TYk5QaaESNG5AaHxo0bM3PmTM466yzmzJnDkiVLWLx4McOGDWPZsmVFTrNFixZA1Cx39tlnM336dNLS0jjnnHOQRLdu3ahSpQpr1qyhSZMmuc14Xbp0oU2bNixcuJCuXXfegaZWrVr06dOHcePGcfLJJ5fKckpWonk7/vjjyc7O5rXXXmPmzJ1P5klLS8vz7LHMzExatGjB+PHjGT9+PBMmTOCnn35iw4YNXHbZZTz//PM7J1RJL/VI5uaqP5jZC2b2S6Lb82QAleLZQ85VdIl+QJs1a0bVqlWpUqUKv/rVr3IfY1+zZs3ca1biwWHq1KnMnDmTVq1acdxxx7Fw4UJ69eqVcHo//PADGzduzP387rvv0qlTJ84666zcI5yFCxeydetW9ttvP1avXs327dGZgCVLlrBo0SIOPvhgNm3aRFZWdOOW7OxsJkyYkNutubwUNG8A7733Hh06dCAtLS03f58+fRgzZgxbtmxh6dKlLFq0iG7duvGXv/yFzMxMli1bxpgxYzjxxBPzBqNKbLee1BaegfRkeDnnUtgPP/zAjh07qFevXu4P6O23305WVlbuo+vHjh2b+6O6evVqGjVqRNWqVfMEh65du3LttdcCsGzZMn75y18yefLkhNNcuXIlZ599NhAFkksuuYTevXuzdetW+vfvT6dOnahRowajRo1CElOmTOH222+nWrVqVK1alSeeeIJGjRqxcuVK+vTpw5YtW9i+fTsnnnhi7iNVyktB8wYwZsyYPM11AIcddhgXXHABhx56KNWqVUuJbuupLqm7fe9NKuTdvvfiw3e/23fpWbJkyS4/oIMHD+byyy8nIyMDSbRq1Yonn3yS5s2b8+qrr+YJDnfeeSdnnnlmnjJzAlJR3b7dHqqA+3yZ3O3bOVcxHXzwwXmehZMj/kysuHPPPZdzzz230DJbtWrlwciVGu9z6JxzLiV4QHLOOZcSvMluD+W/H9VVV13Fhx9+mHv7kJEjR5Kens59993HCy+8AETt+fPmzcs9iZyoHOcqjPI43wFlck6uPM5xAiyrVS6TLXcekPZQovtR3XfffbtcVX7zzTdz8803A/DGG28wbNiw3GBUUDnO7a7y6SRS5pN0eylvstsDOfejGjBgwG6Nl/+K7uKW45xzexMPSHugoPtRDR48mM6dO/P73/+eLVu25Bm2efNm/v3vf+fpzeT3tXLOuXIMSJKWhUeWZ0iaEdIaSZooaVF4bxjSJelhSYslfSnpqFg5V4b8iyRdWVb1L+h+VH/5y1+YP38+n332Gd99913u44NzvPHGGxx77LG5zXV+XyvnnIuU91/yn5tZeuxiqkHA+2bWFnifnbcoOg1oG17XAI9DFMCAO4DuQDfgjpwgVto+/vhjxo8fT6tWrbjooov44IMPuOyyy2jevDmSqFmzJv369cu9LUuO/Fd0F1SOc85VNuUdkPLrC4wKn0cR3dQ1J/1Zi0wDGkhqDpwKTDSz78xsHTAR6F0WFS3oflQ5998yM15//fXc27IArF+/ng8//JC+ffsWWY5zzlU25dnLzoB3JRnwpJk9BTQzsywAM8uSlPMUrwOA5bFxM0NaQel5SLqG6MiKli1blvR85HHppZeyevVqzIz09PQ8T9wcO3Ysp5xyCnXr1i3VOjjnXEVUngHpWDNbEYLOREnzC8mb6DlMVkh63oQo2D0F0b3silPZwvTq1Sv37seFPbPlqquu4qqrrkqqHOecq2zKrcnOzFaE91XAWKJzQCtDUxzhfVXIngkcGBs9DVhRSLpzzrkKplwCkqS6kurlfAZOAb4CxgM5PeWuBMaFz+OBK0Jvux7A+tC09w5wiqSGoTPDKSHNOedcBVNeTXbNiJ5Gm1OHF83s35I+A16WdDXwDXB+yD8BOB1YDGwG+kH0fCZJdwOfhXx3hWc2Oeecq2DKJSCZ2RLgiATpa4GTEqQb8JsCyhoBjCjpOibi97VyzrnSk2rdvp1zzlVSHpCcc86lBA9IzjnnUoIHJOeccynBA5JzzrmU4AHJOedcSvCA5JxzLiV4QHLOOZcSPCA555xLCR6QnHPOpQQPSM4551KCByTnnHMpwQOSc865lOAByTnnXErwgOSccy4leEByzjmXEjwgOeecSwkekJxzzqWEMg9Ikg6UNEnSPElzJA0M6UMkfSspI7xOj41zq6TFkhZIOjWW3jukLZY0qKznxTnnXMmpVg7TzAZuNLPPJdUDZkqaGIYNM7P745klHQpcBBwGtADek9QuDH4MOBnIBD6TNN7M5pbJXDjnnCtRZR6QzCwLyAqfN0qaBxxQyCh9gTFmtgVYKmkx0C0MW2xmSwAkjQl5PSA551wFVK7nkCS1Ao4EPg1J10v6UtIISQ1D2gHA8thomSGtoPRE07lG0gxJM1avXl2Cc+Ccc66klFtAkrQP8Cpwg5ltAB4H2gDpREdQf8/JmmB0KyR910Szp8ysq5l1bdKkyR7X3TnnXMkrj3NISKpOFIxeMLPXAMxsZWz408Cb4WsmcGBs9DRgRfhcULpzzrkKpjx62QkYDswzswdi6c1j2c4GvgqfxwMXSaopqTXQFpgOfAa0ldRaUg2ijg/jy2IenHPOlbzyOEI6FrgcmC0pI6T9EbhYUjpRs9sy4P8BmNkcSS8TdVbIBn5jZtsBJF0PvANUBUaY2ZyynBHnnHMlpzx62f2HxOd/JhQyzj3APQnSJxQ2nnPOuYrD79TgnHMuJXhAcs45lxI8IDnnnEsJHpCcc86lBA9IzjnnUoIHJOeccynBA5JzzrmU4AHJOedcSvCA5JxzLiV4QHLOOZcSPCA555xLCR6QnHPOpQQPSM4551KCByTnnHMpwQOSc865lOAByTnnXErwgOSccy4leEByzjmXEip8QJLUW9ICSYslDSrv+jjnnCueCh2QJFUFHgNOAw4FLpZ0aPnWyjnnXHFU6IAEdAMWm9kSM9sKjAH6lnOdnHPOFYPMrLzrUGySzgN6m9mA8P1yoLuZXZ8v3zXANeFre2BBmVZ0z+0HrCnvSuxFfHmWLF+eJa8iLtODzKzJnhRQraRqUk6UIG2XCGtmTwFPlX51SoekGWbWtbzrsbfw5VmyfHmWvMq6TCt6k10mcGDsexqwopzq4pxzbg9U9ID0GdBWUmtJNYCLgPHlXCfnnHPFUKGb7MwsW9L1wDtAVWCEmc0p52qVhgrb3JiifHmWLF+eJa9SLtMK3anBOefc3qOiN9k555zbS3hAcs45lxI8IBWDpFaSvtqN/CPDNVOF5blBUp3Y9017UsdQxid7WkZFJGmIpJsKGFYpl0lpiu8PknpJerO865RK8u/buzFeB0kZkr6Q1KaobbckfjPKmwek1HEDsNsbbSLhlkqY2TElUd7exJeJKwe7vW+HffgsYJyZHWlmX1eGbdcDUvFVlfS0pDmS3pVUW1K6pGmSvpQ0VlLD/CNJOin845ktaYSkmpJ+B7QAJkmaFMt7j6RZocxmIS3P0VbOv6Lwz3SSpBeB2fmG7SPpfUmfh+n2DemtJM3LPx+luMz2iKTLJE0P/xqflFQ13Fz387Cc3o9lP1TSZElLwvLNKSO+vCZL+pek+ZJekKQwbJmk/cLnrpImh88nhGnn/GutV3ZzX3ok1ZX0VliGX0m6UNLRkj4JadMl1Qvby0dheX8uqdAfSEmNJL0e9odpkjqH9CGSnpP0gaRFkn5VNnNa+hIsyzvIt29LelzSjLDP3Rkbd5mk2yX9B7iQKJANiI2Xs+02lzQlbIdfSeoZK2OX34wKxcz8tZsvoBWQDaSH7y8DlwFfAieEtLuAB8PnkcB5QC1gOdAupD8L3BA+LwP2i03DgDPD578Bf4qXFcu3Kbz3An4AWicYVg2oHz7vBywmustFwvko7+VbwDLvCLwBVA/f/wFcGZZn65DWKLwPAT4Baob5XRsbL7681hNdTF0FmAocl39dAF2ByeHzG8Cx4fM+QLXyXi4ltGzPBZ6Ofd8XWAIcHb7XD9tQHaBWSGsLzIjtD1/Fluub4fMjwB3h84lARmz9zAJqh/WzHGhR3suhFJdl/n07ZzutCkwGOse2u1ti+YYAN8W+52y7NwKDY2XUC58T/mZUpJcfIRXfUjPLCJ9nAm2ABmb2YUgbBRyfb5z2YbyFheTJsRXIaYufSbTTF2W6mS1NkC7gXklfAu8BBwA5/57yz0cy0ykPJwFdgM8kZYTvvwOm5MyzmX0Xy/+WmW0xszXAKnbOb9x0M8s0sx1ABkXP+8fAA+GIq4GZZe/RHKWO2cAvJP01/NtuCWSZ2WcAZrYhzGt14GlJs4FXiO6wX5jjgOdCGR8AjSXtG4aNM7Mfw/qZRHSj5L1BnmVpZusT5LlA0ufAF8Bh5F2OLyUxjc+AfpKGAIeb2caQXpzfjJTiAan4tsQ+bwcaJDFOonvvFWSbhb86ofyci5izCestNDHViI3zQwFlXQo0AbqYWTqwkuhoDXadj1S9WFrAKDNLD6/2wJ0kuHdhkMx8FZQndxmzczlhZkOBAUT/7KdJ6rDbc5GCwh+kLkQ/pn8Bzibxcv090bZzBNGRY40EeeIKu9dk/vL3igsi8y9LSbfHh0tqDdwEnGRmnYG3iG1jFLwPx6cxheiP7LfAc5KuCIMK+s2oMDwglZz1wLpYe+7lwIf58swHWkk6JEGejUAy5ySWEW3wED1qo3oS4+wLrDKzbZJ+DhyUxDip5n3gPElNITo/QdTsc0LYyXPSSsIydi7jc3MSJbUxs9lm9ldgBrBXBCRJLYDNZvY8cD/QA2gh6egwvJ6kakTbUVY4orycqLmoMFOI/gwhqRewxsw2hGF9JdWS1Jiome+zkp2r8pFgWR5F3n27PlHQWR/O8ZxWjGkcRLQ/Pw0MD9PYK1S4CJrirgSeUNTFcwnQLz7QzH6S1A94JezgnwFPhMFPAW9LyjKznxcyjaeBcZKmE/1IF/mPCngBeEPSDKKmqfm7M1OpwMzmSvoT8K6kKsA24DdEjxV5LaStAk4ugcndCQyX9Efg01j6DSGgbwfmAm+XwLRSweHAfZJ2EC3Xa4mObh4JnVx+BH5BdN7uVUnnEzWzFbXtDQH+GZqKNxPtHzmmEx0dtATuNrO95abIiZblz4jt25K+AOYQ/UZ8XIxp9AJulrQN2ARcUXj2isNvHeScK1Ph3McmM7u/vOviUos32TnnnEsJfoTknHMuJfgRknPOuZTgAck551xK8IDknHMuJXhAcs45lxI8IDnnnEsJ/x+tG7eKR0af8wAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "import matplotlib\n",
    "import matplotlib.pyplot as plt\n",
    "import numpy as np\n",
    "\n",
    "\n",
    "labels = ['holothurian', 'echinus', 'scallop', 'starfish']\n",
    "train_means = [4574, 18676, 5554, 5704]\n",
    "aug_train_means = [6991, 20818, 5653, 6326]\n",
    "\n",
    "x = np.arange(len(labels))  # the label locations\n",
    "width = 0.35  # the width of the bars\n",
    "\n",
    "fig, ax = plt.subplots()\n",
    "rects1 = ax.bar(x - width/2, train_means, width, label='train')\n",
    "rects2 = ax.bar(x + width/2, aug_train_means, width, label='aug_train')\n",
    "\n",
    "# Add some text for labels, title and custom x-axis tick labels, etc.\n",
    "ax.set_ylabel('Annotation Number')\n",
    "ax.set_title('The annotation number before and after data augmentation')\n",
    "ax.set_xticks(x)\n",
    "ax.set_xticklabels(labels)\n",
    "ax.legend()\n",
    "\n",
    "\n",
    "def autolabel(rects):\n",
    "    \"\"\"Attach a text label above each bar in *rects*, displaying its height.\"\"\"\n",
    "    for rect in rects:\n",
    "        height = rect.get_height()\n",
    "        ax.annotate('{}'.format(height),\n",
    "                    xy=(rect.get_x() + rect.get_width() / 2, height),\n",
    "                    xytext=(0, 3),  # 3 points vertical offset\n",
    "                    textcoords=\"offset points\",\n",
    "                    ha='center', va='bottom')\n",
    "\n",
    "\n",
    "autolabel(rects1)\n",
    "autolabel(rects2)\n",
    "\n",
    "fig.tight_layout()\n",
    "\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
